import axios from "axios";
import { Message } from "element-ui";
import {removeToken,getToken} from "./cookie.js";
import router from "@/router/index.js";

//声明axios实例
const instance = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL,
  timeout:3000,
});

//请求拦截:发送请求之前拦截
instance.interceptors.request.use((config)=>{
  const {isToken = true}=config

  //判断哪些接口需要携带token
  if(isToken){
    config.headers["token"] = getToken();
    
  }

  return config
})

//响应拦截
instance.interceptors.response.use(
  (res) => {
    //ajax响应成功，处理数据
    const { data } = res;

    if (data.code !== 200) {
      //处理特殊的状态：401：token过期，需要重新登录
      if (data.code === 401) {
        handleToken();
      }

      Message.error(data.msg);
      return Promise.reject(data.msg);

    }
    //返回成功的
    return res.data;
  },
  (error) => {
    //响应失败的，ajax状态码不为200
    console.log(error);
    const { response } = error;

    // //Number:保证switch和case的类型一致
    // switch (Number(response.status)) {
    //   case 404:
    //     console.log(response.data.message);
    //     break;

    //   default:
    //     console.log("未知错误");
    //     break;
    // }

    //处理错误,提示错误
    Message.error(data.msg);
    //Promise:返回失败的
    return Promise.reject(data);
  }
);

function handleToken() {
  //清空token
  removeToken()

  //提示信息
    return MessageBox.confirm("登录状态已过期，请重新登录！", "系统提示", {
    cancelButtonText: "取消",
    confirmButtonText: "重新登录",
    type: "warning",
  })
    .then((res) => {
      //点击确定，跳转登录页
      router.replace("/login");
    })
    .catch((err) => {
      //点击取消，一样跳转到登录页
      router.replace("/login");
    });
}

export default instance;